// 代码索引 3-5-3-1
#include <iostream>
#include <vector>
#include <Eigen/Core>

using namespace std;
using namespace Eigen;

int main()
{
    struct pad {
        Index size() const { return out_size; }
        Index operator[] (Index i) const { return std::max<Index>(0,i-(out_size-in_size)); }
        Index in_size, out_size;
    };
    
    Matrix3i A;
    A.reshaped() = VectorXi::LinSpaced(9,1,9);
    cout << "Initial matrix A:\n" << A << "\n\n";
    MatrixXi B(5,5);
    B = A(pad{3,5}, pad{3,5});
    cout << "A(pad{3,N}, pad{3,N}):\n" << B << "\n\n";

    return 0;
}